//模拟函数调用 - 探寻axios.js底层源码原理
// itcast({
//   method:'请求方法',
//   url:'资源路径',
//   params:'查询参数',//无参 字符串 对象
//   data:'请求体参数',//FormData 字符串 对象
//   success: function (res) {
//     console.log(res)
//   }
// })

function objectTostring(obj) {
  let arr = []
  for (let k in obj) {
    arr.push(`${k}=${obj[k]}`)
  }
  return arr.join('&')
}


function itcast(config) {
  //1.创建
  let xhr = new XMLHttpRequest()

  //4.接收
  xhr.onload = function () {
    let obj = JSON.parse(xhr.response)
    config.success(obj)
  }

  // 2.设置
  //要根据请求方法的不同 进行特殊处理
  if (config.method.toUpperCase() == 'GET') {

    if (typeof config.params == 'undefined') {
      xhr.open('GET', config.url)

    } else if (typeof config.params == 'string') {
      xhr.open('GET', config.url + '?' + config.params)

    } else if (typeof config.params == 'object') {
      xhr.open('GET', config.url + '?' + objectTostring(config.params))

    }
    // 3.发送
    xhr.send()

  } else if (config.method.toUpperCase() == 'POST') {
    if (config.data instanceof FormData) {
      xhr.open('POST', config.url)
      // 3.发送
      xhr.send(config.data)
    } else if (typeof config.data == 'string') {
      xhr.open('POST', config.url)
      //添加头信息
      xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
      // 3.发送
      xhr.send(config.data)
    } else if (typeof config.data == 'object') {
      xhr.open('POST', config.url)
      //设置头信息
      xhr.setRequestHeader('content-type', 'application/json')
      // 3.发送
      xhr.send(JSON.stringify(config.data))
    }
  }
}